#	Транслитерация
#	Примеры вызовов.
#
#	$tmp[^transliter:format[
#		$.table[GOST]
#		$.string[Вася Петров Шьявлев Эмолъволяновь]
#	]]
#	$tmp
#	^transliter:format[
#		$.table[GOST]
#		$.untranslit(1)
#		$.string[$tr1]
#		$.optimize[whitespaces]
#	]
#
#	$.string[STRING] - обязательный параметр. В него передаётся строка для преобразования.
#
#	$.table[STRING/TABLE] - необязательным параметром. В классе 2 таблицы,
#		одна по умолчанию (мне кажется она наиболее удобная), другая - ГОСТ 16876-71.
#		Можно передать свою таблицу. Доступное значение: GOST.
#
#	$.untranslit(INT) - необязательный параметр. Выполняет обратное преобразование.
#
#	$.optimize[STRING] - необязательный параметр. Выполняет мелкие преобразования.
#		Доступное значение: whitespaces (заменяет пробелы на _).




@CLASS
transliter

@auto[]
$default[^table::create{rus	lat
А	A
а	a
Б	B
б	b
В	V
в	v
Г	G
г	g
Д	D
д	d
Э	Ye
э	ye
Ю	Yu
ю	yu
Я	Ya
я	ya
Е	E
е	e
Ё	E
ё	e
Ж	Zh
ж	zh
З	Z
з	z
И	I
и	i
Й	J
й	j
К	K
к	k
Л	L
л	l
М	M
м	m
Н	N
н	n
О	O
о	o
П	P
п	p
Р	R
р	r
У	U
у	u
Ф	F
ф	f
Ц	Ts
ц	ts
Т	T
т	t
Щ	Shch
щ	shch
Ч	Ch
ч	ch
Ш	Sh
ш	sh
С	S
с	s
Х	H
х	h
ь	'
Ь	'
ъ	"
Ъ	"
Ы	Y
ы	y
}]
# Таблица ГОСТ 16876-71
$GOST[^table::create{rus	lat
А	A
а	a
Б	B
б	b
В	V
в	v
Г	G
г	g
Д	D
д	d
Э	Eh
э	eh
Ю	Ju
ю	ju
Я	Ja
я	ja
Е	E
е	e
Ё	E
ё	e
Ж	Zh
ж	zh
З	Z
з	z
И	I
и	i
Й	Jj
й	jj
Л	L
л	l
М	M
м	m
Н	N
н	n
О	O
о	o
П	P
п	p
Р	R
р	r
Т	T
т	t
У	U
у	u
Ф	F
ф	f
Х	Kh
х	kh
К	K
к	k
Ч	Ch
ч	ch
Ц	С
ц	с
Щ	Shh
щ	shh
Ш	Sh
ш	sh
С	S
с	s
ъ	"
Ъ	"
Ы	Y
ы	y
ь	'
Ь	'
}]
#end @auto[]

@format[params][table]
^if(!def $params.string){
	^throw[transliter.string;^$.string option MUST be specified.]
}
^if($params.table is 'table'){
	$table[$params.table]
}{
	^switch[$params.table]{
		^case[DEFAULT]{
			$table[$default]
		}
		^case[GOST]{
			$table[$GOST]
		}
	}
}
^if($params.untranslit){
$table[^table::create{lat	rus
^table.menu{
$table.lat	$table.rus
}
}]
}
$result[^params.string.replace[$table]]
^if(def $params.optimize){
	^switch[$params.optimize]{
		^case[whitespaces]{
			$result[^result.match[\s][g]{_}]
		}
		^case[whitespaces_plus]{
			$result[^result.match[\s+][g]{_}]
		}
	}
}
#end @format[]